package com.clkj.sunhelp.http;

import com.google.gson.JsonObject;

import java.util.concurrent.TimeUnit;

import okhttp3.OkHttpClient;
import retrofit2.Retrofit;
import retrofit2.adapter.rxjava.RxJavaCallAdapterFactory;
import retrofit2.converter.gson.GsonConverterFactory;
import retrofit2.http.POST;
import retrofit2.http.Query;
import rx.Observable;

/**
 * Created by Administrator on 2017/3/1.
 */

public interface HttpService {


    /*String URL_TEST = "http://192.168.2.68:8222/Notice/";
    String URL_REAL = "http://192.168.2.68:8222/Notice/";

    String URL_IN_USE = URL_TEST;*/

    /**
     * 获取列表

     * @return
     *//*
    @FormUrlEncoded
    @POST("examlpelist")
    Observable<JsonObject> getExampleList(
    );*/


    /**
     * 获取政策法规类型
     *
     * @return
     */
    @POST("GetAllZCFGType")
    Observable<JsonObject> getPolicyKind();

    /**
     * 获取政策法规列表数据
     *
     * @return
     */
    @POST("GetAllZCFG")
    Observable<JsonObject> getPolicyList(@Query("sertch") String keyWord,
                                         @Query("fgtype") String policyType,
                                         @Query("fbr") String publishPerson,
                                         @Query("page") String pageIndex,
                                         @Query("rows") String pageSize
    );

    /**
     * 获取政策法规详情数据
     *
     * @return
     */
    @POST("GetByNewsId")
    Observable<JsonObject> getPolicyDetail(@Query("nId") String policyId);


    /**
     * 获取申请对象公示列表
     *
     * @param type      初次公示和二次公示
     * @param pageIndex
     * @param pageSize
     * @return
     */
    @POST("GetSqdxGsList")
    Observable<JsonObject> getPublicityOfApplyObjList(@Query("gstype") String type,
                                                      @Query("page") String pageIndex,
                                                      @Query("rows") String pageSize);

    /**
     * 获取申请对象公示详情
     *
     * @param publicityId
     * @return
     */
    /*@POST("GetSqdxGsInfo")
    Observable<JsonObject> getPublicityOfApplyObjDetail(@Query("gsid") String publicityId);*/

    @POST("GetGSInfo")
    Observable<JsonObject> getPublicityOfApplyObjDetail(@Query("gsid") String publicityId,
                                                        @Query("cunCode") String cunLuoCode,
                                                        @Query("gstype") String gongShiType);

    /**
     * 获取申请对象公示详情
     * @param publicityId
     * @return
     *//*
    @POST("GetGSInfo")
    Observable<JsonObject> getPublicityOfApplyObjDetailNew(@Query("gsid") String publicityId);*/



    /**
     * 获取申请结果公示列表
     *
     * @return
     */
    /// <param name="ffnd">发放年度</param>
    /// <param name="xq">县区</param>
    /// <param name="street">街道</param>
    /// <param name="cl">村落</param>
    /// <param name="sfzh">身份证号</param>
    /// <param name="page"></param>
    /// <param name="rows"></param>
    /// <returns></returns>

    @POST("GetSDJGGS")
    Observable<JsonObject> getPublicityOfApplyResultList(@Query("xmmc") String projName,
                                                         @Query("ffnd") String releaseYear,
                                                         @Query("xq") String xianQu,
                                                         @Query("street") String jieDao,
                                                         @Query("cl") String sheQuOrCun,
                                                         @Query("sfzh") String idCardNo,
                                                         @Query("shzt") String examStatus,
                                                         @Query("page") String pageIndex,
                                                         @Query("rows") String pageSize);

    /**
     * 普通用户注册
     *
     * @param userName
     * @param passWord
     * @param realName
     * @param contactTel
     * @return
     */
    @POST("RegQZUser")
    Observable<JsonObject> registerOfPeople(@Query("username") String userName,
                                            @Query("pwd") String passWord,
                                            @Query("realname") String realName,
                                            @Query("lxfs") String contactTel);


    /**
     * 普通用户登陆
     *
     * @param userName
     * @param passWord
     * @return
     */
    @POST("RegLogin")
    Observable<JsonObject> loginOfPeople(@Query("userName") String userName,
                                         @Query("password") String passWord
    );

    /**
     * 工作人员登陆
     *
     * @param userName
     * @param passWord
     * @return
     */
    @POST("WorkLogin")
    Observable<JsonObject> loginOfWorker(@Query("userName") String userName,
                                         @Query("password") String passWord
    );


    /**
     * 获取救助项目类型list
     *
     * @return
     */
    @POST("GetSqProject")
    Observable<JsonObject> getHelpProjKindList();

    /**
     * 获取需要处理的节点
     *
     * @param helpProKindName 待办工作类型
     * @param userId          用户id
     * @param pageIndex       页号
     * @param pageSize        页量
     * @return
     */
    @POST("GetProcList")
    Observable<JsonObject> getJobWaitToDoList(@Query("proc") String processName,
                                              @Query("SchemeName") String proKindName,
                                              @Query("zid") String helpProKindName,
                                              @Query("userid") String userId,
                                              @Query("pages") String pageIndex,
                                              @Query("rows") String pageSize
    );

    /**
     * 上传文件操作
     *
     * @param jieDianName 节点名称
     * @param processId   当前办理的节点的id
     * @param userId      用户id
     * @return
     */
    @POST("UploadifyFile")
    Observable<JsonObject> uploadFile(@Query("proc") String jieDianName,
                                      @Query("processid") String processId,
                                      @Query("uId") String userId
    );


    /**
     * 获取资金发放公示：根据个人信息
     *
     * @param personName
     * @param idCardNo
     * @param pageIndex
     * @param pageSize
     * @return
     */
    @POST("GetZJFFBYGR")
    Observable<JsonObject> getFundReleasePublicityByPersonInfo(@Query("name") String personName,
                                                               @Query("pid_code") String idCardNo,
                                                               @Query("page") String pageIndex,
                                                               @Query("rows") String pageSize
    );

    /**
     * 获取资金发放公示：通过项目类型
     *
     * @param projName
     * @param xianQuName
     * @param jieDaoName
     * @param cunLuoName
     * @param pageIndex
     * @param pageSize
     * @return
     */
    @POST("GetZJFFBYXM")
    Observable<JsonObject> getFundReleasePublicityByProjKind(@Query("xmmc") String projName,
                                                             @Query("ffny") String releaseYear,
                                                             @Query("xq") String xianQuName,
                                                             @Query("street") String jieDaoName,
                                                             @Query("cl") String cunLuoName,
                                                             @Query("page") String pageIndex,
                                                             @Query("rows") String pageSize
    );



    /**
     * 获取所有的区县信息
     *
     * @return
     */
    @POST("GetAllZoneName")
    Observable<JsonObject> getAllQuXianInfo();

    /**
     * 根据区县id获取乡镇信息
     *
     * @param quXianId
     * @return
     */
    @POST("GetByAreaId")
    Observable<JsonObject> getXiangZhenByQuXianId(@Query("nId") String quXianId);

    /**
     * 根据乡镇id获取村落信息
     *
     * @param xianZhenId
     * @return
     */
    @POST("GetByAreaId")
    Observable<JsonObject> getCunLuoInfoByXiangZhenId(@Query("nId") String xianZhenId);

    /**
     * 获取审核状态
     * @return
     */
    @POST("GetSHZT")
    Observable<JsonObject> getExamStatus();


    /**
     * 获取低保申请详情
     * @param id  低保id
     * @return
     */
    @POST("GetApplicantInfo")
    Observable<JsonObject> getDiBaoApplicationInfo(@Query("id")String id);


    /**获取审批节点查询结果
     * @param realName
     * @param idCardNo
     * @param pageIndex
     * @param id
     * @return
     */
    @POST("Auditnodepublicity")
    Observable<JsonObject> getPublicityOfShenPiProcessInfo(@Query("name")String realName,
                                                           @Query("pidcode")String idCardNo,
                                                           @Query("page")String pageIndex,
                                                           @Query("rows")String id);



    class Factory {

        private static OkHttpClient generateOkHttpClient() {
            OkHttpClient httpClient = new OkHttpClient.Builder()
                    .readTimeout(5, TimeUnit.MINUTES)
                    .connectTimeout(5, TimeUnit.MINUTES)
                    .writeTimeout(5, TimeUnit.MINUTES)
                    .build();


            /*InputStream cerInputStream = null;
            HttpsUtils.SSLParams sslParams = HttpsUtils.getSslSocketFactory(new InputStream[]{cerInputStream},null,null);

            OkHttpClient httpClient = new OkHttpClient.Builder()
                    .readTimeout(5, TimeUnit.MINUTES)
                    .connectTimeout(5, TimeUnit.MINUTES)
                    .writeTimeout(5, TimeUnit.MINUTES)
                    .sslSocketFactory(sslParams.sSLSocketFactory,sslParams.trustManager)
                    .build();*/


            return httpClient;
        }

        public static HttpService create(String baseUrl) {

            /*Gson gson = new GsonBuilder()
                    .setLenient()
                    .create();*/

            Retrofit retrofit = new Retrofit.Builder()
                    .baseUrl(baseUrl + "/")
                    .client(generateOkHttpClient())
                    .addConverterFactory(GsonConverterFactory.create())
                    .addCallAdapterFactory(RxJavaCallAdapterFactory.create())
                    .build();
            return retrofit.create(HttpService.class);
        }
    }

}
